<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

require_once APPPATH . 'models/m_object.php';

/**
 * Модель шаблона
 *
 * @package CoreFramework
 * @version 1.0
 * @author Gennadiy Kozlenko
 */
class M_Template extends M_Object {
   
   /**
    * Стили, подключенные шаблону
    *
    * @var unknown_type
    */
   var $_styles = array();
   
   /**
    * Название таблицы
    *
    * @access protected
    * @var string
    */
   var $_table = 'templates';
   
   /**
    * Конструктор класса
    *
    * @access public
    * @return M_Template
    */
   function M_Template() {
      parent::M_Object();
   } // end M_Template
   
   /**
    * Получение стилей
    *
    * @access public
    * @return array
    */
   function get_styles() {
      return $this->_styles;
   } // end get_styles
   
   /**
    * Установка стилей
    *
    * @access private
    * @param array $styles
    */
   function set_styles($styles) {
      $this->_styles = $styles;
      $this->_is_changed = true;
   } // end set_styles
   
   /**
    * Загрузка стилей, подключенных шаблону
    *
    * @access private
    */
   function _load_styles() {
      $this->_styles = array();
      $sql = "
         SELECT
            id_style
         FROM
            " . $this->db->dbprefix('template_styles') . "
         WHERE
            id_template = " . $this->db->escape($this->get_id('id_template')) . "
      ";
      $query = $this->db->query($sql);
      foreach ($query->result_array() as $result) {
         array_push($this->_styles, $result['id_style']);
      }
   } // end _load_styles
   
   /**
    * Обновление стилей
    *
    * @access private
    * @return boolean
    */
   function _update_styles() {
      if ($this->_delete_styles()) {
         foreach ($this->_styles as $id_style) {
            $sql = "
               INSERT INTO
                  " . $this->db->dbprefix('template_styles') . " (
                     id_template,
                     id_style
                  ) VALUES (
                     " . $this->db->escape($this->get_id('id_template')) . ",
                     " . $this->db->escape($id_style) . "
                  )
            ";
            if (null === $this->db->query($sql)) {
               return false;
            }
         }
         return true;
      }
      return false;
   } // end _update_styles
   
   /**
    * Удаление стилей, подключенных шаблону
    *
    * @access private
    * @return unknown
    */
   function _delete_styles() {
      $sql = "
         DELETE
         FROM
            " . $this->db->dbprefix('template_styles') . "
         WHERE
            id_template = " . $this->db->escape($this->get_id('id_template')) . "
      ";
      if (null !== $this->db->query($sql)) {
         return true;
      }
      return false; 
   } // end _delete_styles
   
   /**
    * Удаление записи
    *
    * @access protected
    * @return boolean
    */
   function _delete() {
      $this->db->trans_begin();
      if ($this->_delete_styles() && parent::_delete()) {
         $this->db->trans_commit();
         return true;
      }
      $this->db->trans_rollback();
      return false;
   } // end _delete
   
   /**
    * Вставка записи
    *
    * @access protected
    * @return boolean
    */
   function _insert() {
      $this->db->trans_begin();
      if (parent::_insert() && $this->_update_styles()) {
         $this->db->trans_commit();
         return true;
      }
      $this->db->trans_rollback();
      return false;
   } // end _insert
   
   /**
    * Изменение записи
    *
    * @access protected
    * @return boolean
    */
   function _update() {
      $this->db->trans_begin();
      if (parent::_update() && $this->_update_styles()) {
         $this->db->trans_commit();
         return true;
      }
      $this->db->trans_rollback();
      return false;
   } // end _update
   
   /**
    * Загрузка информации по объекту из базы
    *
    * @access protected
    */
   function _load_data() {
      parent::_load_data();
      $this->_load_styles();
   } // end _load_data
   
}
